﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace syc.Store.报表
{
    public partial class 原料成品收拨平衡表 : System.Web.UI.Page
    {
        protected HSSFWorkbook hssfworkbook;
        protected string year;
        protected string month;
        protected DateTime 年初;  
        protected DateTime 上期月末;
        protected double 油管光管期初库存;
        protected double 套管光管期初库存;
        protected double 油管接箍光管期初库存;
        protected double 套管接箍光管期初库存;
        protected double 成品套管接箍N80期初库存;
        protected double 成品套管接箍期初库存;
       
        protected int 自产油管接箍期初库存;
        protected int 自产套管接箍期初库存;

        protected double 油管光管外购量;
        protected double 套管光管外购量;
        protected double 油管接箍光管外购量;
        protected double 套管接箍光管外购量;
        protected double 成品套管接箍N80外购量;
        protected double 成品套管接箍外购量;
       
        protected int 自产油管接箍本期外购量;
        protected int 自产套管接箍本期外购量;

        protected double 油管光管出库量;
        protected double 套管光管出库量;
        protected double 油管接箍光管出库量;
        protected double 套管接箍光管出库量;
        protected double 成品套管接箍N80出库量;
        protected double 成品套管接箍出库量;
       
        protected int 自产油管接箍本期出库量;
        protected int 自产套管接箍本期出库量;      

        protected int y3yjiegu = 0;//三分厂月油管接箍
        protected int y3tjiegu = 0;//三分厂月套管接箍
        protected int yyjiegu = 0;//月自产油管接箍本期入库量
        protected int ytjiegu = 0;//月自产套管接箍本期入库量  

        protected double 待处理油管期末库存;
        protected double 待处理套管期末库存;
        protected double 待处理油管出库量;        
        protected double 待处理套管出库量;
        //成品-----------------------------------------------      
        protected double 油管期初库存;
        protected double 套管期初库存;
        protected double 油管本期入库;
        protected double 套管本期入库;
        protected double 油管本期销售;
        protected double 套管本期销售;
        protected double 油管本期结存;
        protected double 套管本期结存;


        protected double 油管N80期初库存;
        protected double 套管N80期初库存;
        protected double 油管N80本期入库;
        protected double 套管N80本期入库;
        protected double 油管N80本期销售;
        protected double 套管N80本期销售;
        protected double 油管N80本期结存;
        protected double 套管N80本期结存;

        protected double 套管N80光管期初库存;
        protected double 套管N80光管外购量;
        protected double 套管N80光管出库量;

        protected double 待处理套管N80期末库存;
        protected double 待处理套管N80出库量;
   
    
        protected void Page_Load(object sender, EventArgs e)
        {         
            if (!IsPostBack)
            {
                this.Year0.SelectedValue = DateTime.Today.Year.ToString();
                this.Month0.SelectedValue = DateTime.Today.Month.ToString();
                year = this.Year0.SelectedValue;
                month = this.Month0.SelectedValue;
            }
            Button_Query_Click(null, null);
        }

        protected void Button_Query_Click(object sender, EventArgs e)
        {       
                  
            SqlConnection Conn = new SqlConnection();
            Conn.ConnectionString = ConfigurationManager.ConnectionStrings["SCMConnectionString1"].ConnectionString;
            Conn.Open();
            SqlCommand Cmd = new SqlCommand();
            Cmd.Connection = Conn;
            //原料
            //期初库存-------------@lym表示上期月末-------------@lym表示上期月末库存
            string sql = @"            
            select dbo.原料期初库存(@年度,@月份,1),dbo.原料期初库存(@年度,@月份,2),dbo.原料期初库存(@年度,@月份,3),dbo.原料期初库存(@年度,@月份,4),dbo.原料期初库存(@年度,@月份,106),dbo.原料期初库存(@年度,@月份,6),dbo.自产接箍期初库存(@年度,@月份,1),dbo.自产接箍期初库存(@年度,@月份,2),dbo.原料期初库存(@年度,@月份,102)";
            sql = sql.Replace("@年度", this.Year0.SelectedValue);
            sql = sql.Replace("@月份", this.Month0.SelectedValue);
            Cmd.CommandText = sql;
            SqlDataReader Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                油管光管期初库存 = Reader.GetDouble(0);
                套管光管期初库存 = Reader.GetDouble(1);               
                油管接箍光管期初库存 = Reader.GetDouble(2);
                套管接箍光管期初库存 = Reader.GetDouble(3);
                成品套管接箍N80期初库存 = Reader.GetDouble(4);
                成品套管接箍期初库存 = Reader.GetDouble(5);
                自产油管接箍期初库存 = Reader.GetInt32(6);
                自产套管接箍期初库存 = Reader.GetInt32(7);
                套管N80光管期初库存=Reader.GetDouble(8); 
            }
            Reader.Close();
            //本期收入
            string sql1 = @"            
            select dbo.原料本期收入(@年度,@月份,1),dbo.原料本期收入(@年度,@月份,2),dbo.原料本期收入(@年度,@月份,3),dbo.原料本期收入(@年度,@月份,4),dbo.原料本期收入(@年度,@月份,106),dbo.原料本期收入(@年度,@月份,6),dbo.自产接箍本期收入(@年度,@月份,1),dbo.自产接箍本期收入(@年度,@月份,2),dbo.原料本期收入(@年度,@月份,102)";
            sql1 = sql1.Replace("@年度", this.Year0.SelectedValue);
            sql1 = sql1.Replace("@月份", this.Month0.SelectedValue);
            Cmd.CommandText = sql1;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                油管光管外购量 = Reader.GetDouble(0);
                套管光管外购量 = Reader.GetDouble(1);
                油管接箍光管外购量 = Reader.GetDouble(2);
                套管接箍光管外购量 = Reader.GetDouble(3);
                成品套管接箍N80外购量 = Reader.GetDouble(4);
                成品套管接箍外购量 = Reader.GetDouble(5);
                自产油管接箍本期外购量 = Reader.GetInt32(6);
                自产套管接箍本期外购量 = Reader.GetInt32(7);
                套管N80光管外购量 = Reader.GetDouble(8);
            }
            Reader.Close();

            //本期消耗量
            string sql2 = @"            
            select dbo.原料本期发出(@年度,@月份,1),dbo.原料本期发出(@年度,@月份,2),dbo.原料本期发出(@年度,@月份,3),dbo.原料本期发出(@年度,@月份,4),dbo.原料本期发出(@年度,@月份,106),dbo.原料本期发出(@年度,@月份,6),dbo.自产接箍本期发出(@年度,@月份,1),dbo.自产接箍本期发出(@年度,@月份,2),dbo.原料本期发出(@年度,@月份,102)";
            sql2 = sql2.Replace("@年度", this.Year0.SelectedValue);
            sql2 = sql2.Replace("@月份", this.Month0.SelectedValue);
            Cmd.CommandText = sql2;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                油管光管出库量 = Reader.GetDouble(0);
                套管光管出库量 = Reader.GetDouble(1);
                油管接箍光管出库量 = Reader.GetDouble(2);
                套管接箍光管出库量 = Reader.GetDouble(3);
                成品套管接箍N80出库量 = Reader.GetDouble(4);
                成品套管接箍出库量 = Reader.GetDouble(5);
                自产油管接箍本期出库量 = Reader.GetInt32(6);
                自产套管接箍本期出库量 = Reader.GetInt32(7);
                套管N80光管出库量 = Reader.GetDouble(8);
            }
            Reader.Close();

           // 待处理
            string sql3 = @"
            declare @nc datetime 
            declare @lym datetime
            declare @待处理油管本期消耗 float
            declare @待处理套管本期消耗  float
            declare @待处理油管期末库存 float
            declare @待处理套管期末库存 float

            select dbo.待处理本期发出(@年度,@月份,1),dbo.待处理本期发出(@年度,@月份,2),dbo.待处理期末库存(@年度,@月份,1),dbo.待处理期末库存(@年度,@月份,2),dbo.待处理本期发出(@年度,@月份,102),dbo.待处理期末库存(@年度,@月份,102)";
            sql3= sql3.Replace("@年度", this.Year0.SelectedValue);
            sql3= sql3.Replace("@月份", this.Month0.SelectedValue);
            Cmd.CommandText=sql3;
            Reader = Cmd.ExecuteReader();
             if (Reader.Read())
             {                
                 待处理油管出库量 = Reader.GetDouble(0);
                 待处理套管出库量 = Reader.GetDouble(1);
                 待处理油管期末库存 = Reader.GetDouble(2);
                 待处理套管期末库存 = Reader.GetDouble(3);
                 待处理套管N80出库量 = Reader.GetDouble(4);
                 待处理套管N80期末库存 = Reader.GetDouble(5);
             }
            Reader.Close();
        
            //成品
            //本期收入           
            string sql4 = @"select dbo.产品本期收入(@年度,@月份,1,0),dbo.产品本期收入(@年度,@月份,2,0),dbo.产品本期收入(@年度,@月份,3,0),dbo.产品本期收入(@年度,@月份,4,0)";
            sql4 = sql4.Replace("@年度", this.Year0.Text);
            sql4 = sql4.Replace("@月份", this.Month0.Text);
            Cmd.CommandText = sql4;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                油管本期入库 = Reader.GetDouble(0);
                套管本期入库 = Reader.GetDouble(1);
                油管N80本期入库 = Reader.GetDouble(2);
                套管N80本期入库 = Reader.GetDouble(3); 
            }
            Reader.Close();
            //本期发出      
            string sql5 = @"select dbo.产品本期发出(@年度,@月份,1,0),dbo.产品本期发出(@年度,@月份,2,0),dbo.产品本期发出(@年度,@月份,3,0),dbo.产品本期发出(@年度,@月份,4,0)";
            sql5 = sql5.Replace("@年度", this.Year0.Text);
            sql5 = sql5.Replace("@月份", this.Month0.Text);
            Cmd.CommandText = sql5;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                油管本期销售 = Reader.GetDouble(0); 
                套管本期销售 = Reader.GetDouble(1);
                油管N80本期销售 = Reader.GetDouble(2);
                套管N80本期销售 = Reader.GetDouble(3); 
            }
            Reader.Close();
            //本期结存
            string sql6 = @"select dbo.产品本期结存(@年度,@月份,1,0),dbo.产品本期结存(@年度,@月份,2,0),dbo.产品本期结存(@年度,@月份,3,0),dbo.产品本期结存(@年度,@月份,4,0)";
            sql6 = sql6.Replace("@年度", this.Year0.Text);
            sql6 = sql6.Replace("@月份", this.Month0.Text);
            Cmd.CommandText = sql6;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                油管本期结存 = Reader.GetDouble(0);
                套管本期结存 = Reader.GetDouble(1);
                油管N80本期结存 = Reader.GetDouble(2);
                套管N80本期结存 = Reader.GetDouble(3);   
            }
            Reader.Close();
            油管期初库存 = 油管本期结存 + 油管本期销售 - 油管本期入库;
            套管期初库存 = 套管本期结存 + 套管本期销售 - 套管本期入库;

            油管N80期初库存 = 油管N80本期结存 + 油管N80本期销售 - 油管N80本期入库;
            套管N80期初库存 = 套管N80本期结存 + 套管N80本期销售 - 套管N80本期入库;
   
   
            Conn.Close();
            Reader.Dispose();
            Cmd.Dispose();
            Conn.Dispose();
        }
        protected void WriteToFile()
        {           
            Response.ContentType = "application/ms-excel";
            Response.AddHeader("content-disposition", "attachment; filename=\"" + DateTime.Now.ToShortDateString() + ".xls\"");
            hssfworkbook.Write(Response.OutputStream);
        }

        protected void InitializeWorkbook()
        {

            FileStream file = new FileStream(HttpContext.Current.Server.MapPath("/Store/报表/模板/原料成品收拨平衡表.xls"), FileMode.Open, FileAccess.Read);

            hssfworkbook = new HSSFWorkbook(file);

            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = "原料成品收拨平衡表";
            hssfworkbook.DocumentSummaryInformation = dsi;

            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = "报表";
            si.Title = "原料成品收拨平衡表";
            hssfworkbook.SummaryInformation = si;
        }
        protected void Button1_Click(object sender, EventArgs e)
        {            
            InitializeWorkbook();
            HSSFSheet sheet1 = hssfworkbook.GetSheet("原料成品收拨平衡表");         
            Button_Query_Click(null, null);
            sheet1.GetRow(0).GetCell(0).SetCellValue(this.Year0.SelectedValue + "年" + this.Month0.SelectedValue + "月份原料、成品收拨平衡表");
            sheet1.GetRow(2).GetCell(6).SetCellValue(DateTime.Now.ToString("yyyy年MM月dd日"));
            sheet1.GetRow(6).GetCell(2).SetCellValue(油管光管期初库存);
            sheet1.GetRow(6).GetCell(3).SetCellValue(油管光管外购量);
            sheet1.GetRow(6).GetCell(4).SetCellValue(油管光管出库量);
            sheet1.GetRow(6).GetCell(5).SetCellValue(油管光管出库量);
            sheet1.GetRow(6).GetCell(7).SetCellValue(油管光管期初库存 + 油管光管外购量 - 油管光管出库量);

            sheet1.GetRow(7).GetCell(2).SetCellValue(待处理油管期末库存 - 待处理油管出库量);          
            sheet1.GetRow(7).GetCell(4).SetCellValue(0-待处理油管出库量);
            sheet1.GetRow(7).GetCell(5).SetCellValue(0-待处理油管出库量);
            sheet1.GetRow(7).GetCell(7).SetCellValue(待处理油管期末库存);

            sheet1.GetRow(8).GetCell(2).SetCellValue(套管光管期初库存);
            sheet1.GetRow(8).GetCell(3).SetCellValue(套管光管外购量);
            sheet1.GetRow(8).GetCell(4).SetCellValue(套管光管出库量);
            sheet1.GetRow(8).GetCell(5).SetCellValue(套管光管出库量);
            sheet1.GetRow(8).GetCell(7).SetCellValue(套管光管期初库存 + 套管光管外购量 - 套管光管出库量);

            sheet1.GetRow(9).GetCell(2).SetCellValue(待处理套管期末库存 - 待处理套管出库量);          
            sheet1.GetRow(9).GetCell(4).SetCellValue(0-待处理套管出库量);
            sheet1.GetRow(9).GetCell(5).SetCellValue(0-待处理套管出库量);
            sheet1.GetRow(9).GetCell(7).SetCellValue(待处理套管期末库存);

            sheet1.GetRow(10).GetCell(2).SetCellValue(套管N80光管期初库存);
            sheet1.GetRow(10).GetCell(3).SetCellValue(套管N80光管外购量);
            sheet1.GetRow(10).GetCell(4).SetCellValue(套管N80光管出库量);
            sheet1.GetRow(10).GetCell(5).SetCellValue(套管N80光管出库量);
            sheet1.GetRow(10).GetCell(7).SetCellValue(套管N80光管期初库存 + 套管N80光管外购量 - 套管N80光管出库量);

            sheet1.GetRow(11).GetCell(2).SetCellValue(待处理套管N80期末库存 - 待处理套管N80出库量);
            sheet1.GetRow(11).GetCell(4).SetCellValue(0 - 待处理套管N80出库量);
            sheet1.GetRow(11).GetCell(5).SetCellValue(0 - 待处理套管N80出库量);
            sheet1.GetRow(11).GetCell(7).SetCellValue(待处理套管N80期末库存);

            sheet1.GetRow(12).GetCell(2).SetCellValue(油管接箍光管期初库存);
            sheet1.GetRow(12).GetCell(3).SetCellValue(油管接箍光管外购量.ToString("0.000"));
            sheet1.GetRow(12).GetCell(4).SetCellValue(油管接箍光管出库量.ToString("0.000"));
            sheet1.GetRow(12).GetCell(5).SetCellValue(油管接箍光管出库量.ToString("0.000"));
            sheet1.GetRow(12).GetCell(7).SetCellValue(油管接箍光管期初库存 + 油管接箍光管外购量 - 油管接箍光管出库量);

            sheet1.GetRow(13).GetCell(2).SetCellValue(套管接箍光管期初库存);
            sheet1.GetRow(13).GetCell(3).SetCellValue(套管接箍光管外购量.ToString("0.000"));
            sheet1.GetRow(13).GetCell(4).SetCellValue(套管接箍光管出库量.ToString("0.000"));
            sheet1.GetRow(13).GetCell(5).SetCellValue(套管接箍光管出库量.ToString("0.000"));
            sheet1.GetRow(13).GetCell(7).SetCellValue(套管接箍光管期初库存 + 套管接箍光管外购量 - 套管接箍光管出库量);

            sheet1.GetRow(16).GetCell(2).SetCellValue(成品套管接箍期初库存);
            sheet1.GetRow(16).GetCell(3).SetCellValue(成品套管接箍外购量);
            sheet1.GetRow(16).GetCell(4).SetCellValue(成品套管接箍出库量);
            sheet1.GetRow(16).GetCell(5).SetCellValue(成品套管接箍出库量);
            sheet1.GetRow(16).GetCell(7).SetCellValue(成品套管接箍期初库存 + 成品套管接箍外购量 - 成品套管接箍出库量);

            sheet1.GetRow(17).GetCell(2).SetCellValue(成品套管接箍N80期初库存);
            sheet1.GetRow(17).GetCell(3).SetCellValue(成品套管接箍N80外购量);
            sheet1.GetRow(17).GetCell(4).SetCellValue(成品套管接箍N80出库量);
            sheet1.GetRow(17).GetCell(5).SetCellValue(成品套管接箍N80出库量);
            sheet1.GetRow(17).GetCell(7).SetCellValue(成品套管接箍N80期初库存 + 成品套管接箍N80外购量 - 成品套管接箍N80出库量);

            sheet1.GetRow(18).GetCell(2).SetCellValue(自产套管接箍期初库存);
            sheet1.GetRow(18).GetCell(3).SetCellValue(自产套管接箍本期外购量);
            sheet1.GetRow(18).GetCell(4).SetCellValue(0-自产套管接箍本期出库量);
            sheet1.GetRow(18).GetCell(5).SetCellValue(0-自产套管接箍本期出库量);
            sheet1.GetRow(18).GetCell(7).SetCellValue(自产套管接箍期初库存 + 自产套管接箍本期外购量 + 自产套管接箍本期出库量);

            sheet1.GetRow(19).GetCell(2).SetCellValue(自产油管接箍期初库存);
            sheet1.GetRow(19).GetCell(3).SetCellValue(自产油管接箍本期外购量);
            sheet1.GetRow(19).GetCell(4).SetCellValue(0-自产油管接箍本期出库量);
            sheet1.GetRow(19).GetCell(5).SetCellValue(0-自产油管接箍本期出库量);
            sheet1.GetRow(19).GetCell(7).SetCellValue(自产油管接箍期初库存 + 自产油管接箍本期外购量 + 自产油管接箍本期出库量);

            sheet1.GetRow(22).GetCell(2).SetCellValue(套管期初库存);
            sheet1.GetRow(22).GetCell(3).SetCellValue(套管本期入库);
            sheet1.GetRow(22).GetCell(4).SetCellValue(套管本期销售);
            sheet1.GetRow(22).GetCell(5).SetCellValue("");
            sheet1.GetRow(22).GetCell(7).SetCellValue(套管本期结存);

            sheet1.GetRow(23).GetCell(2).SetCellValue(油管期初库存);
            sheet1.GetRow(23).GetCell(3).SetCellValue(油管本期入库);
            sheet1.GetRow(23).GetCell(4).SetCellValue(油管本期销售);
            sheet1.GetRow(23).GetCell(5).SetCellValue("");
            sheet1.GetRow(23).GetCell(7).SetCellValue(油管本期结存);

            sheet1.GetRow(24).GetCell(2).SetCellValue(套管N80期初库存);
            sheet1.GetRow(24).GetCell(3).SetCellValue(套管N80本期入库);
            sheet1.GetRow(24).GetCell(4).SetCellValue(套管N80本期销售);
            sheet1.GetRow(24).GetCell(5).SetCellValue("");
            sheet1.GetRow(24).GetCell(7).SetCellValue(套管N80本期结存);

            sheet1.GetRow(25).GetCell(2).SetCellValue(油管N80期初库存);
            sheet1.GetRow(25).GetCell(3).SetCellValue(油管N80本期入库);
            sheet1.GetRow(25).GetCell(4).SetCellValue(油管N80本期销售);
            sheet1.GetRow(25).GetCell(5).SetCellValue("");
            sheet1.GetRow(25).GetCell(7).SetCellValue(油管N80本期结存);
            WriteToFile();
            Response.End();
        }

        protected void Year0_SelectedIndexChanged(object sender, EventArgs e)
        {
            year = this.Year0.SelectedValue;
            month = this.Month0.SelectedValue;
        }

        protected void Month0_SelectedIndexChanged(object sender, EventArgs e)
        {
            year = this.Year0.SelectedValue;
            month = this.Month0.SelectedValue;
        }

       
    }
}
